专利摘要:
コンポーネント領域に付随する様々なコンポーネント同士の間のバインディングを定義するために用いられるコンポーネント領域が開示される。コンポーネント領域は、各コンポーネントによってインポートされるべき様々なサービスをトラッキングし、各コンポーネントによってエクスポートされる様々なサービスをトラッキングする。コンパイル時よりはむしろランタイムに、コンポーネント同士の間の様々な相互関係がサービスインポートデータ及びサービスエクスポートデータを用いてバインディングされる。従って、利用できるコンポーネント及び該コンポーネントの特徴によって、バインディングは異なっていてもよい。これによって、アプリケーションにより柔軟性をもたらす。1つの実施例において、バインディングは繰り返して行なわれる。例えば、サービスインポートをサービスエクスポートにバインディングする1つのイテレーションの後ならば、いくつかのコンポーネントは、これらコンポーネントがエクスポートするサービスまたはこれらがインポートすることを所望するサービスを展開することができる。
公开号:JP2011511987A
申请号:JP2010545906
申请日:2009-01-06
公开日:2011-04-14
发明作者:ジェイ.ムーア アンソニー;エル.アンダーソン クリストファー;エー.ジパースキー クレメンス;エフ.ボックス ドナルド;エス.キマーリー ランディ
申请人:マイクロソフト コーポレーション;
IPC主号:G06F9-44
专利说明:

[0001] 本発明は、反復コンポーネントのバインディングに関する。]
背景技術

[0002] オブジェクト指向プログラミングは、オブジェクトインスタンス、即ち「コンポーネント」の集合としてソフトウェアを構造化しており、その各々は、コンポーネントの方法及びプロパティを定義するクラスにならって形成されている。プログラミングを参照すると、「コンポーネント化」はコンポーネントを定義することを示し、コンポーネントはプログラムにとって都合がよい形に作られる。もちろん、プログラムのコンポーネントは、プログラムのより大きな目標を達成するために機能的に相互接続されている。「コンポジション」は、プログラム内のオブジェクトが互いに関連付けられる方法を定義することを示す。]
[0003] 通常、オブジェクト同士の間の相互関係は、プログラムのコンポーネント同士の間の関係を特に具体的に定義するコードまたは宣言を用いて実現される。オブジェクト指向プログラミング技術は、符号化オブジェクト同士の間の相互接続のかかる明示的なコンポジションを用いて大きく進歩した。従来の明示的なコンポジションにおいて、例えば、プログラムのコンポジション(即ち、コンポーネント同士の間の相互関係)を定義するコードは、ソースコードを用いてプログラムをオーサリングした後にコンパイルされる。よって、実行可能ファイルは、生成時から、プログラムの様々なコンポーネント及びプログラムコンポーネント同士の間の様々な相互関係を表す。]
[0004] 本明細書において説明される実施形態は、コンポーネント領域の使用に関し、コンポーネント領域に付随する様々なコンポーネント同士の間のバインディングを定義する。コンポーネント領域は、各コンポーネントによってインポートされるべき様々なサービスをトラッキングし、各コンポーネントによってエクスポートされる様々なサービスをトラッキングする。コンパイル時よりはむしろランタイムに、コンポーネント同士の間の様々な相互関係は、サービスインポートデータ及びサービスエクスポートデータを用いてバインディングされる。従って、利用可能なコンポーネント及びコンポーネントの特徴により、バインディングは異なっていてもよい。これによって、アプリケーションがより柔軟性を有するようになる。1つの実施形態において、バインディングは反復して行われる。例えば、サービスインポートをサービスエクスポートにバインディングする1つのイテレーションの後ならば、いくつかのコンポーネントはコンポーネントがエクスポートするサービスまたはコンポーネントがインポートすることを所望するサービスを展開することができる。]
[0005] この概要は、請求された発明の重要な特徴または基本的特徴を識別することを意図しておらず、請求された発明の範囲を決定する際の助けとして用いられることも意図していない。]
[0006] 本明細書において説明される実施形態の上記の利点及び特徴並びにその他の利点及び特徴を得ることができる方法を説明するために、上記に簡潔に説明した本発明のより詳しい実施形態が、添付の図面に示される特定の実施形態を参照することによって示される。これらの図面はより上位の原理の例示的な実施形態だけを表しており、従って、本発明の範囲を限定すると見なされるべきでないという理解の下に、実施形態は、添付の図面を利用して付加的な特異性及び詳細を用いて記述されかつ説明される。]
図面の簡単な説明

[0007] コンポーネント領域を動作させることができる例示的なコンピュータシステムを示す図である。
コンポーネント領域内に含まれる付随される論理及びコンポーネントを有するコンポーネント領域の例示的なアーキテクチャを示す図である。
バインディングされた後のコンポーネント領域の様々なコンポーネントの例を示す図である。
ネストされたコンポーネントの展開に付随するプロセスのフローを示す図である。
コンポーネント領域のコンポーネントを反復してバインディングする方法のフローチャートである。
ネストされたコンポーネントを有するコンポーネントをインスタンス化した後にネストされたコンポーネントを展開する方法のフローチャートである。
サービスインポートをサービスエクスポートで満足させる方法のフローチャートである。]
実施例

[0008] 本明細書において説明される実施形態によれば、コンポーネント領域は、コンポーネント領域内の様々なコンポーネント同士の間のバインディングを生成するために用いられる。コンポーネント領域は、各コンポーネントによってインポートされるべき様々なサービスをトラッキングし、各コンポーネントによってエクスポートされる様々なサービスをトラッキングする。コンパイル時よりはむしろランタイムに、コンポーネント同士の間の様々な相互関係は、サービスインポートデータ及びサービスエクスポートデータを用いてバインディングされる。従って、利用できるコンポーネント及びコンポーネントの特徴に応じて、バインディングは異なっていてもよい。これによって、アプリケーションがより柔軟性を有するようになる。1つの実施例において、バインディングは反復して行なわれる。例えば、サービスインポートをサービスエクスポートにバインディングする1つのイテレーションの後ならば、いくつかのコンポーネントはコンポーネントがエクスポートするサービスまたはコンポーネントがインポートすることを所望するサービスを展開することができる。]
[0009] 最初に、コンピュータシステムに関する一般的な導入的議論の後に、基本的なコンピュータシステムが図1に関して説明される。次に、コンポーネント領域論理を有するコンポーネント領域の様々な実施形態及びそのオペレーションの様々な実施形態が、図2乃至7に関して示されかつ説明される。] 図1 図2
[0010] コンピュータシステムは、今や、ますます多種多様な形式をとっている。コンピュータシステムは、例えば、携帯端末、電化製品、ラップトップコンピュータ、デスクトップコンピュータ、メインフレーム、分散コンピュータシステム、または、従来コンピュータシステムと認められなかったデバイスであるかもしれない。本明細書および特許請求の範囲において、用語「コンピュータシステム」は、少なくとも1つのプロセッサとプロセッサが実行することができるコンピュータ実行可能命令を有することができるメモリとを含む何らかのデバイスまたはシステム(またはこれらの組合せ)を含むものとして広く定義される。メモリは、いかなる形式を取ることもでき、コンピュータシステムの性質及び形式によって決まってもよい。コンピュータシステムは、ネットワーク環境を介して分散されていてもよく、複数の構成のコンピュータシステムを含むことができる。]
[0011] 図1を参照すると、その最も基本的なコンフィギュレーションにおいて、コンピュータシステム100は通常、少なくとも1つの処理装置102及びメモリ104を含む。メモリ104は物理的なシステムメモリであってもよい。物理的なシステムメモリは、揮発性、不揮発性、またはこれら2つのうちのいくつかの組み合わせであってもよい。用語「メモリ」は、また、本明細書において、物理的記憶媒体などの不揮発性の大容量記憶装置を示すために用いられる。コンピュータシステムが分散されている場合、処理能力、メモリ能力及び/または記憶能力も同様に分散されていてもよい。本明細書において用いられるように、用語「モジュール」または「コンポーネント」は、コンピュータシステムで実行するソフトウェアオブジェクトまたはルーチンを示すことができる。本明細書において説明される異なるコンポーネント、モジュール、エンジン、及びサービスは、コンピュータシステムで実行するオブジェクトまたはプロセスとして実施されてもよい(例えば、別個のスレッドとして)。] 図1
[0012] 後に続く詳細な説明において、実施形態が、1つまたは複数のコンピュータシステムによって行なわれる動作を参照して説明される。かかる動作がソフトウェアで実施される場合、動作を行なう付随するコンピュータシステムの1つまたは複数のプロセッサは、コンピュータ実行可能命令を実行したことに応じてコンピュータシステムのオペレーションを指示する。かかるオペレーションの例は、データの操作を含む。コンピュータ実行可能命令(及び操作されたデータ)は、コンピュータシステム100のメモリ104に格納されてもよい。]
[0013] コンピュータシステム100は、また、通信チャネル108を含むことができ、通信チャネル108によって、コンピュータシステム100が、例えばネットワーク110などを介して他のコンピュータシステムと通信できるようになる。通信チャネル108は、通信媒体の例である。通信媒体は、通常、コンピュータ可読命令、データ構造、プログラムモジュール、または搬送波もしくは他の輸送メカニズムなどの変調されたデータ信号内の他のデータを具体化し、あらゆる情報交付媒体を含む。一例であって限定ではないが、通信媒体は、有線ネットワーク及び直接配線接続などの有線媒体、並びに音響、無線通信、赤外線及び他の無線媒体などの無線媒体を含む。本明細書において用いられる用語コンピュータ可読媒体は、記憶媒体及び通信媒体の両方を含む。]
[0014] 図1において、コンピュータシステム100は、メモリ104の不揮発性部分の中にコンポーネント領域112を有するように示されている。図2及び図2に続く図に関して更に詳細に説明されるように、コンポーネント領域112は様々なコンポーネントをその中にインスタンス化する論理コンテナとして用いられる。次にコンポーネント領域論理114は、コンパイル時にバインディングされたコンポーネントを有するというよりは、様々なコンポーネントを動的にバインディングする。] 図1 図2
[0015] 本発明の範囲内の実施形態は、また、コンピュータ可読媒体を含み、該コンピュータ可読媒体に格納されるコンピュータ実行可能命令またはデータ構造を運ぶかまたはこれらを有している。かかるコンピュータ可読媒体は、汎用コンピュータまたは専用コンピュータがアクセスできるあらゆる利用可能な媒体であってもよい。一例であって限定ではないが、かかるコンピュータ可読媒体は、物理的記憶装置及び/またはメモリ媒体を含むことができ、該物理的記憶装置及び/またはメモリ媒体は、RAM、ROM、EEPROM、CD−ROMもしくは他の光ディスク記憶装置、磁気ディスク記憶デバイスもしくは他の磁気記憶デバイス、またはコンピュータ実行可能命令またはデータ構造の形で所望のプログラムコード手段を運ぶかまたは格納することができかつ汎用コンピュータまたは専用コンピュータがアクセスすることができるあらゆる他の媒体などである。情報がネットワークまたは別の通信接続(配線接続による通信接続、無線による通信接続、または、配線接続による通信接続または無線による通信接続の組み合わせ)を介してコンピュータに転送されるかまたは提供されると、コンピュータは、コンピュータ可読媒体として該接続を適当に表示する。よって、いずれのかかる接続も、コンピュータ可読媒体と称されるのが適当である。上記の組合せも、コンピュータ可読媒体の範囲内に含まれなければならない。]
[0016] コンピュータ実行可能命令は、例えば、汎用コンピュータ、専用コンピュータ、または専用処理装置に特定の機能または一群の機能を実行させる命令及びデータを含む。本発明は構造上の特徴及び/または方法論的動作に固有の言語で説明されているが、添付の特許請求の範囲において画定される本発明は、本明細書において説明されている特定の特徴または特定の動作に必ずしも限定されるわけではないと理解されなければならない。むしろ、本明細書において説明されている特定の特徴及び動作は、特許請求の範囲を実施する例の一種として開示されている。]
[0017] 図2は、コンポーネント領域210及び「コンポーネント領域論理」と名前を付けられた付随するコンポーネント領域マネージャ220を示す。図2のコンポーネント領域210は、例えば、図1のコンポーネント領域112であってもよい。コンポーネント領域210は、コンポーネントインスタンスを含むことができるいかなる論理コンテナであってもよい。コンポーネント領域210の柔軟性によって、コンポーネント領域が様々なクラスの様々なコンポーネントインスタンスを含むことができるようになる。コンポーネント領域210内に含まれるコンポーネントのタイプは、アプリケーション及びそのアプリケーションによって用いられる構成要素によって決まる。従って、本発明の原理は、コンポーネント領域210内に含まれるコンポーネントのタイプに限定されないし、コンポーネント領域内のコンポーネントの数にも限定されない。そうは言っても、例示を目的として、6つのコンポーネント211、212、213、214、215、及び216が、コンポーネント領域210に含まれるように示されている。] 図1 図2
[0018] コンポーネント領域210は、実際にまたは論理的に他のコンポーネントを含むことができる何らかの論理コンテナでもあってもよい。例えば、コンポーネント領域210は、様々なコンポーネントインスタンスを与えられることができるコンテナクラスのインスタンスであってもよい。コンポーネントインスタンスの集合は、データ構造である。コンポーネント領域210は、また、直接各コンポーネントインスタンスを含まないが場合によっては付随するコンポーネントに関する情報を有するオブジェクトであってもよい。その場合でさえ、コンポーネントはコンポーネント領域210内で論理的とみなすことができる。例えば、1つの実施形態において、コンポーネント領域は、一群の名前と値の対である一群の値だけを含む場合もある。コンポーネント領域は、サービスをエクスポートするコンポーネントから値を与えられ、そのサービスをインポートするコンポーネントが値を与えられる。そのような状況を考慮してもなお、コンポーネントは、論理的にコンポーネント領域内にまたはその内部にあるとみなすことができる。この明細書においてかつ特許請求の範囲において、コンポーネントがコンポーネント領域内にまたはその内部にあると言う場合、このことは、コンポーネントがコンポーネント領域内に含まれるかまたは、コンポーネント領域論理220がコンポーネント領域に付随する様々なコンポーネントと通信しかつバインディングすることができるようなやり方でコンポーネントがコンポーネント領域に何らかの形で論理的に付随するかのいずれかであるということを意味する。]
[0019] コンポーネント領域論理220は、例えば、関連メカニズム222、サービスインベントリメカニズム223、ネストされたコンポーネントの展開メカニズム224、付随するマッチングルール226を有するマッチングメカニズム225、抽出メカニズム227、及び付随するカタログ229を有するカタログ化メカニズム228を含む様々なメカニズムを含むように示されている。これらの様々なメカニズム222乃至229は、別個のメカニズムとして示されている。しかしながら、これはコンポーネント領域論理220の機能を説明する際に明確にすることを目的としている。これらが実際に別個のメカニズムであることを表すために用いられていない。いくつかのメカニズムを、単一のコンポーネントに組み合わすことができる。実際、コンポーネント領域論理の全ては、モノリシックであってもよい。他の例では、各メカニズムは複数のコンポーネントから構成されていてもよい。単一のコンポーネントも、複数のメカニズムに関係する論理を含むことができる。様々なコンポーネント領域論理220のメカニズムのオペレーションを、すぐ後に説明する。]
[0020] しかしながら、最初に、この詳細な説明は、コンポーネント領域210内でインスタンス化される様々な構成コンポーネントを振り返ってみる。図示された例において、構成コンポーネントは、コンポーネント211乃至216を含む。各コンポーネントは、特定のクラスのインスタンスである。この原理を記号で表すために、各コンポーネントは、特定の形式で示されている。例えば、例において、コンポーネント211は正方形で示されている。コンポーネント212及び214は、これらが同じクラスのインスタンスの各々であって各インスタンスはコンポーネント211と同じクラスでないことを示す三角形で示されている。コンポーネント213は、これがコンポーネント211及び212と異なるクラスのインスタンスであることを表す円で示されている。コンポーネント215は、コンポーネント211乃至214と異なったクラスのインスタンスであることを表している上辺が大きい平行四辺形で示されている。最後に、コンポーネント216は、コンポーネント211乃至215と異なったクラスのインスタンスであるということを表している底辺が大きい平行四辺形で示されている。]
[0021] 各コンポーネントは、潜在的に1つまたは複数のサービスインポート及び潜在的に1つまたは複数のサービスエクスポートを含む。コンポーネントに関する「サービスインポート」は、コンポーネントがサービスを要求しているという表示である。コンポーネントに関する「サービスエクスポート」は、コンポーネントがサービスを提供することを提案しているという表示である。サービスインポート及びサービスエクスポートは、対応するコンポーネントから伸びたアームによって、図2において各々記号で表されている。サービスインポートは、その端部にカップの形を有するアームで表されている。サービスエクスポートは、その端部にボールの形を有するアームで表されている。図2のコンフィギュレーションにおいて、コンポーネント211−216の全ては、コンポーネント領域210内でインスタンス化されている。しかしながら、コンポーネントのいずれも互いに接続されていない。コンポーネントが接続されるべき方法は、ランタイムに先立ってさらには明確に特定されていない。その代わりに、サービスインポート及びサービスエクスポートが特定されている。様々なサービスのインポート及びエクスポートは、図2において文字A乃至Fを用いて抽象的に表されている様々なサービスに対するものである。] 図2
[0022] 例えば、コンポーネント211は、アームaで表されるようなサービスBのための1つのサービスエクスポートを有する。更に、2つのサービスインポート、即ち、アームiで表されるようなサービスAのための1つのサービスインポート及びアームjで表されるようなサービスAのためのもう1つのサービスインポートを有する。コンポーネント212は、2つのサービスエクスポート、即ち、アームbで表されるサービスAのための1つのサービスエクスポート及びアームcで表されるサービスEのための1つのサービスエクスポートを有する。コンポーネント212は、サービスインポートを有していない。コンポーネント213は、アームdで表されるサービスFのための1つのサービスエクスポート及び、2つのサービスインポート、即ち、アームkで表されるサービスBのための1つのサービスインポート及びアームmで表されるサービスCのためのもう1つのサービスインポートを有する。コンポーネント214は、コンポーネント212と同じクラスである。1つの実施形態において、サービスインポート及びサービスエクスポートのタイプは、クラスによって画定される。従って、コンポーネント214は、サービスインポートを有しておらず、2つのサービスエクスポート、即ち、アームfで表されるサービスAのための1つのサービスエクスポート及びアームeで表されるサービスEのための1つのサービスエクスポートを有するという点で、コンポーネント212と同様である。コンポーネント215は、サービスインポートを有しておらず、アームgで表されるサービスDのためである1つのサービスインポートを有している。コンポーネント216は、アームnで表されるサービスDのための1つのサービスインポートと、アームhで表されるサービスCのための1つのサービスエクスポートを有している。]
[0023] コンポーネント領域210は、コンポーネントのコンポジションの前に様々なコンポーネント211乃至216を示す。「コンポジション」は、様々なコンポーネントが相互接続されるべき方法を定義することを示す。最終的に、コンポーネント領域210のコンポーネントは、コンポーネントの定義された相互接続を有する。しかしながら、このことは、コンポーネント領域210の様々なコンポーネントで表されるアプリケーションの実行前に行われなかった。むしろ、コンポーネント領域論理220は、ランタイムにおける様々なコンポーネント同士の間の接続を定義する。]
[0024] 図3は、コンポジション後の様々なコンポーネント211乃至216を示す。1つの特定のマッチングオペレーションにおいて、特定のサービスのためのサービスエクスポートは、同じ特定のサービスのためのサービスインポートに連結することになっている。図3において、コンポーネント212のサービスAのためのサービスエクスポートは、(アームjに接続するアームbで表されるように)コンポーネント211のサービスAのためのサービスインポートに接続されている。これによって、コンポーネント212は、関連するインタフェースを用いてコンポーネント211にサービスAを提供することが表されている。同じ記号で表された意味は、サービスインポート及びサービスエクスポートのそれぞれのサービスに関して図3に示されているサービスインポートとサービスエクスポートとの間の他の接続にあてはまる。例えば以下のアーム対は、接続されて示されている。即ち、サービスAのためのアームfとアームi、サービスBのためのアームaとアームk、サービスCのためのアームhとアームm、及びサービスDのためのアームgとアームnが接続されて示されている。コンポーネント212のサービスEのためのサービスエクスポート(アームcで表されている)は、いずれのサービスインポートにも接続されておらず、このサービスエクスポートが潜在的であることを表している。同じ記号で表された意味が、アームd及びアームeにあてはまる。] 図3
[0025] コンポーネント同士の間の接続は前もって定義されていないが、コンポーネントのためのサービスエクスポート及びサービスインポートは示されている。サービスエクスポート及びインポートがどこでまたはどのように特定されるかは問題ではない。しかしながら、1つの考えられる場所は、クラス定義自体においてであってもよい。例えば、C#コードで書かれた「Consumer」と称されるクラスのための以下のクラス定義を検討する。]
[0026] ]
[0027] 角括弧において、class Consumerは、「Consumer Report」と称されるサービスをインポートすることを宣言する。角括弧の内容は、C#のコンパイルされたオブジェクトの機能に影響を及ぼさない。むしろ、内容は、そのデフォルト実行の一部でない方法でこれを記述するコンパイルされたタイプまたはメンバを伴うメタデータとしてコンパイルされたクラスに書き込まれるが、外部から調べることができかつ影響を与えることができる。この例では、クラスのオブジェクトがインスタンス化されることになっているときに、その事前コンパイルされた形式または事後コンパイルされた形式のいずれかのクラス定義が参照されて、そのクラスの後の特定のオブジェクトのためのサービスインポートを識別してもよい。]
[0028] サービスインポートとサービスエクスポートとの間の1つの例示的なマッチングにおいて、サービス名は正確にマッチングすることになっているが、他のマッチングルールがあってもよい。以下は、クラスが「Consumer Report」と称されるサービスをエクスポートする、C#で表されたクラス定義を表す。]
[0029] ]
[0030] ここで、角括弧内のメタデータ表現は、クラスReportEnvelopeが「Consumer Report」サービスをエクスポートすることを宣言している。例えば、ReportEnvelopeクラスのオブジェクトがConsumerクラスのオブジェクトと接続されている場合、ConsumerオブジェクトはReportEnvelopeオブジェクトからレポートを得ることができる。]
[0031] この例では、コンパイルされているかまたは事前コンパイルされているかにかかわらず、クラス自体が参照されて、特定のオブジェクトのためのサービスエクスポート及びサービスインポートを判断することができる。別の実施形態では、オブジェクトは、コンポーネント領域論理が様々なオブジェクトにサービスインポートの識別及びサービスエクスポートの識別を要求するために用いることができるインタフェースを提供してもよい。]
[0032] コンポーネント領域マネージャ220の様々なメカニズム222−229が、ここで詳細に説明される。今度も、これらのメカニズムは、機能によって分類されており、コンポーネント領域マネージャ220におけるいかなる実際のオブジェクト境界も表していない。下記のように、様々なメカニズム222−229のうちのいくつかは、システムで提供される基本的なランタイムによって提供されることが多いインスタンス化メカニズムを用いることもある。インスタンス化メカニズムは、クラス定義を使用する能力を有していて、そのクラスに続くコンポーネントをインスタンス化する。]
[0033] 関連モジュール222は、インスタンス化されたコンポーネントをコンポーネント領域210に付随させることができる。例えば、図2において、コンポーネント211乃至216は、コンポーネント領域210内に付随して示されており、該コンポーネントはまだインスタンス化されていないが、コンポーネント領域210に付随するというような方法で、インスタンス化されるということを表している。コンポーネント領域210に付随するコンポーネントは、ランタイムに特定のバインディング処理を受ける。コンポーネント領域とのコンポーネントの関連は、各コンポーネントのインスタンス化の時点で行われてもよいし、または、その後しばらくして行われてもよい。] 図2
[0034] サービスインベントリメカニズム223は、コンポーネント領域に付随するコンポーネントによってエクスポートされたサービス及びインポートされたサービスにインデックスを付ける。サービスインベントリメカニズム223は、これらのサービスを発見するためのメカニズムを有することができる。例えば、1つの実施形態において、特定のクラスのコンポーネントがインスタンス化される場合、サービスインベントリメカニズム223は、クラス定義にアクセスして、インポートされたサービス(もしくは複数のサービス)またはエクスポートされたサービス(もしくは複数のサービス)を判断することができる。別の実施形態では、コンポーネントは、発見の要求に応じるように構成されていてもよい。例えば、コンポーネントは、アプリケーションプログラムインタフェースを提供することができ、該アプリケーションプログラムインタフェースは、エクスポートしかつインポートするサービス(または複数のサービス)のクエリを行っているエンティティに通知する働きをする。あるいは、コンポーネントは、インスタンス化されると直ちに特定の場所にそのサービスインポート及びサービスエクスポートを書き込むように構成されていてもよい。]
[0035] 例えば、図2を参照すると、サービスインベントリメカニズムは、概念的に以下の表1を維持することができる。] 図2
[0036] ]
[0037] サービスインベントリメカニズム223は、表として情報を表す必要はないが、表は、維持される情報のタイプを読む人に示すために役に立つ説明である。更に、サービスインベントリメカニズム223は、特定のコンポーネントによってエクスポートされるサービスまたはインポートされるサービスの全てを知らないかもしれない。]
[0038] ネストされたコンポーネントの展開メカニズム224は、コンポーネント領域のコンポーネントがその中にネストされたコンポーネントを有しているかどうかを判断する。例えば、図4は、図2のコンポーネントのうちの1つ(即ち、コンポーネント215)が矢印410で表される展開前に、ネストされたコンポーネントの階層を含んでいることを表す。特に、図4のコンポーネント215は、展開前に2つのチャイルドコンポーネント401及び402を含む。これらのチャイルドコンポーネントのうちの1つ符号402は、展開前にこれら自身のチャイルドコンポーネント411及び412を含む。] 図2 図4
[0039] ネストされたコンポーネントの展開メカニズム224は、ネストされたコンポーネントを発見して、該コンポーネントを展開して、ネストされたコンポーネントによってエクスポートされかつインポートされるサービスもバインディングオペレーションに対して表示させられる。例えば、展開410の後に、様々なネストされたコンポーネント401、402、411、及び412は、バインディングのために表示されるように示されたエクスポートされた該コンポーネントの様々なサービス(コンポーネント411について言えばサービスA及びE)とともに示されている。更に、インポートされた様々なサービス(コンポーネント401のためのサービスA、コンポーネント402のためのサービスB及びコンポーネント412のためのサービスC)がバインディングのために表示されるように示されている。よって、展開後に、これらのネストされたコンポーネントは、サービスインベントリメカニズム223によって認識される。]
[0040] マッチングメカニズム225は、コンポーネントをバインディングせよという要求に実際に応ずる。バインディングを行うために、マッチングメカニズム225は、一組のマッチングルール226に従う。マッチングメカニズム225は、マッチングルール226に従って、サービスインポートをサービスエクスポートにマッチングさせて、バインディングする。例えば、図3において、コンポーネント領域210の様々なコンポーネントは、互いにバインディングされて示されている。] 図3
[0041] マッチングルールは、デフォルトの潜在的な一組のマッチングルールであってもよい。または、デフォルトのマッチングルールにオーバライディングする他のマッチングルールがあってもよい。例えばデフォルトで、サービスインポートをサービスエクスポートにマッチングさせることは、サービス名の正確なマッチングを見つけることによって行われる場合もある。例えば、上述のクラス定義の例において、クラス「Consumer」は「Consumer Report」と称されるサービスインポートを有する。一方、クラス「ReportEnvelope」は、正確に同じ名前「Consumer Report」によるサービスエクスポートを有する。サービス名の正確なマッチングルールに従って、ReportEnvelopeのインスタンスのサービスエクスポートは、Consumerのインスタンスのサービスインポートにバインディングすることができる。]
[0042] しかしながら、他のサービスマッチングルールが適用されてもよい。例えば、いくつかのマッチングルールにおいて無視される場合があるかもしれない。他のルールにおいて、互いにマッチングしているとみなすことができるサービス名のクラスタがあってもよい。例えば、イタリア語のサービス名、フランス語のサービス名などがあってもよく、これらは、各々マッチングしているとみなすことができる。別の一組のマッチングルールによれば、サービスインポートまたはサービスエクスポートが名前で特定されない場合、マッチングメカニズム224は、メンバ名、サービスインポートのタイプ及びパラメータ、対抗するメンバ名、サービスエクスポートのタイプ及びパラメータを実際に構造的に判断することができる。]
[0043] サービスマッチングメカニズム225は、また、単に論理的にコンポーネントをマッチングさせないステップを取ることができるが、また、サービスインポート及びサービスエクスポートの実際の機能的なバインディングに少なくとも関係することができる。1つの実施形態において、一旦サービスマッチングメカニズム225がマッチングを見つけると、サービスマッチングメカニズム225は、サービスをエクスポートしているコンポーネントからの要求されたサービスを得ることができて、サービスをインポートしているコンポーネントにそのサービスを提供することができる。]
[0044] 別の実施形態において、サービスマッチングメカニズム225は、サービスをインポートしているコンポーネントにハンドルデータ構造を提供することができる。次にサービスをインポートしているメカニズムは、そのハンドルを用いて、サービスをエクスポートしているメカニズムとのバインディングを完了することができる。サービスマッチングメカニズムによって、サービスをインポートしているメカニズムがマッチングを受け入れるようにするかまたは拒絶できるようにするのは任意である。例えば、マッチングが受け入れられる場合、サービスをインポートしているコンポーネントは、サービスマッチングメカニズムに通知することができ、実際のバインディングが生じることに続く。サービスが受け入れられるとみなされない場合、サービスマッチングメカニズムは、受け入れられるマッチングが見つかってサービスをインポートしているコンポーネントによって受け入れられるまで、予備のマッチングなどを見つける場合がある。]
[0045] 例えば、ハンドルデータ構造は、ファクトリを含むことができ、該ファクトリは、サービスをインポートしているコンポーネントが、そのインポートとマッチングコンポーネントによって提案されたエクスポートとの間のバインディングオペレーションを実行するために用いることができる。ハンドルは、また、メタデータ(以後「選択メタデータ」と称される)を含むことができ、メタデータは、サービスをインポートしているコンポーネントが、バインディングを実行するためにファクトリをトリガするべきか否かを判断するために用いることができる情報を含む。1つの実施形態では、サービスをインポートしているコンポーネントは、選択メタデータを用いないかもしれないが、その代わりに自動的にバインディングを受け入れるファクトリを用いることができる。しかしながら、サービスをインポートしているコンポーネントは、提案されたエクスポートがサービスをインポートしているコンポーネントに受け入れられるかどうかを判断するために代わりに選択メタデータを用いることができる。サービスをインポートしているコンポーネントは、バインディングを受け入れることを選択する場合、サービスをインポートしているコンポーネントは、ファクトリを用いてシステムにバインディングの完了をもたらすことができる。]
[0046] 別の場合では、特定のサービスインポートに対するサービスエクスポートの複数の起こ得るマッチングがあるかもしれない。その場合、ハンドルは、ファクトリ及び潜在的なサービスエクスポートの各々のための選択メタデータを含むことができる。次にサービスをインポートしているコンポーネントは、メタデータを用いて、いずれも選択しないかまたはインポートのためのサービスエクスポートのサブセットを選択することができる場合がある。次にサービスをインポートしているコンポーネントは、選択されたサービスエクスポートの対応するファクトリを用いて、選択されたサービスエクスポートの各々とのバインディングを完了することができる。]
[0047] 例えば、コンシューマコンポーネントは、上記の例におけるように「Consumer Report」と称されるサービスをインポートすることになっていると仮定する。「Consumer Report」と称されるサービスを提供する複数のコンポーネントがあった場合、コンシューマコンポーネントは、潜在的なサービスエクスポートのマッチングの各々に対して、ファクトリ及び選択メタデータを与えられてもよい。選択メタデータは、例えば、1)Consumer Reportが生成された日付け、及び2)Consumer Reportが関係している製品クラスの識別、を含むことができる。コンシューマコンポーネントが、「Consumer Report」と称される1つのサービスエクスポートだけに興味があった場合、コンシューマコンポーネントは、選択メタデータを用いて、最近生成されかつコンシューマコンポーネントに最も関連した製品クラスを示すコンシューマレポートサービスのエクスポートを識別することができる。]
[0048] 一部の例では、特定のサービスインポートにマッチングするサービスエクスポートを提供するコンポーネントがコンポーネント領域内にないかもしれない。かかる場合、バインディングはやはり潜在的に行なわれてもよい。バインディングを特定のサービスインポートについて最初に行なうことができない場合を処理する多くの方法がここで説明される。]
[0049] ある例では、サービスインポートは、「重要性」の特性等に付随してもよく、「重要性」の特性は、サービスインポートが満足する全体的なアプリケーションの機能性に対してどれくらい緊急かについて特定する。重要性が高い場合、サービスエクスポートはどこかで見つけられなければならない。しかしながら、重要性が低い場合、アプリケーションはサービスインポートを全くバインディングすることなしにやっていくことができる場合もある。様々な中間の重要性レベルがあってもよく、これらは、バインディングオペレーションがサービスエクスポートを見つけようとすることになっている範囲まで制御することができる。]
[0050] 1つの実施形態では、特定のサービスインポートのためのサービスエクスポートが、コンポーネント領域内で見つけられない場合、抽出メカニズム227が、別のコンポーネント領域から別のコンポーネントを見つける場合もある。従って、単一のコンピュータシステム上で動作しているかまたは、コンピュータシステムがネットワークを介してアクセスできる多くのコンポーネント領域があってもよい。その場合、バインディングされるべきサービスインポートに対応するサービスエクスポートを提供するコンポーネントが見つかるまで、抽出メカニズム227は、これらの他のコンポーネント領域を求めてサービスインベントリメカニズム(または場合によってはカタログメカニズム228)を調べることができる。1つの実施形態では、抽出メカニズム227は、サービスエクスポートを提供するコンポーネントとして、自身をシミュレーションすることができる。よって、サービスインポートは、抽出メカニズム227自体にバインディングすることができる。サービスをインポートしているコンポーネントがサービスを求めて抽出メカニズム227にコールを行う場合、抽出メカニズム227は、その外部コンポーネントとインタフェースして、要求されたサービスを行なうことができる。]
[0051] 1つの実施形態では、コンポーネント領域は、関連するコンポーネント領域の数に付随してもよい。抽出メカニズム227は、適当なサービスエクスポートのためのこれらの関連するコンポーネント領域の全てを探し出すことができる。他の実施形態では、抽出メカニズム227は、関連するコンポーネント領域のうちのいくつかだけを探し出すことができる。例えば、コンポーネント領域210がコンポーネント領域の階層的ツリーのノードであった場合、抽出メカニズム227は、横系統のコンポーネント領域を探すよりむしろ、縦系統のノードを表しているコンポーネント領域だけを探すことができる場合もある。よって抽出コンポーネント227は、多くの異なるサービスエクスポートのためのサービスエクスポートを抽出することができるとともに、これによってサービスを実行する様々な外部のコンポーネントとのインタフェースに必要な基本的な処理を実行する。]
[0052] あるいは、または更に、サービスインポートがコンポーネント領域内ですでにインスタンス化されたコンポーネントで満足されない場合、カタログ化メカニズム228はカタログ229を用いて、特定のサービスエクスポートを提供するそのときインスタンス化されていないコンポーネントを見つけることができる。例えば、カタログ229は、様々なクラス定義を含み、各々は、そのクラスのオブジェクトによってエクスポートされるサービスを記述するメタデータを有している。付随するメタデータについての判断に基づいて、カタログメカニズム228は、必要とされるサービスエクスポートを提供する特定のクラス定義を見つけることができる。次にカタログ化メカニズム228は、コンポーネント領域210内でインスタンス化されるべきそのクラスの外部のコンポーネントを選択することができる。あるいは、サービスをインポートしているコンポーネントは、カタログ化されたクラスによってエクスポートされるサービスを記述するメタデータを与えられてもよい。その結果、インポートしているコンポーネントは、エクスポートされたサービスが満足のいくものかどうかに関して自身の判断を行うことができる。これが満足のいくものである場合、サービスをインポートしているコンポーネントは、クラスのコンポーネントをインスタンス化させることができる。例えば、サービスをインポートしているコンポーネントはまた、サービスをエクスポートしているコンポーネントがインスタンス化されるようになるファクトリにアクセスする能力を提供されていてもよい。]
[0053] 図2のコンポーネント領域論理220の様々な機能を説明してきたが、ここで様々なプロセスが図5乃至図7に関して説明される。] 図2 図5 図7
[0054] 図5はプログラムのコンポーネントを作成する方法500のフローチャートを示す。コンポーネント領域を作成した(動作501)後に、最初のコンポーネントセットがインスタンス化されて、コンポーネント領域に付随させられる(動作502)。例えば、図2を参照すると、コンポーネント領域210は、付随するコンポーネント領域論理220のうちのいくつかまたは全てを用いて生成されてもよい。コンポーネント領域の最初のコンポーネントセットは、わずか1つであってもよいが、制限なくもっと多くてもよい。図2の例では、コンポーネント領域に6つのコンポーネント211乃至216がある。しかしながら、最初のコンポーネントセットのコンポーネントの数は、本発明のより上位の原理にとって重要でない。コンポーネント領域においてインスタンス化されなければならない、最初のコンポーネントセットの各コンポーネント及びコンポーネント領域でインスタンス化されるべきいずれかの次のコンポーネントは、コンポーネント領域に付随しており、その結果、コンポーネントのうちのいずれかによってインポートされるサービスがもしあれば当該サービス、及びコンポーネントのうちのいずれかによってエクスポートされるサービスがもしあれば当該サービスが、コンポーネント領域に対して表示される。] 図2 図5
[0055] このインスタンス化プロセスの中の一部として、ネストされたコンポーネントが展開される(動作503)。図6は、コンポーネントのインスタンス化する方法600のフローチャートを示す。コンポーネント自体は、最初にインスタンス化される(動作601)。コンポーネントがいずれかのネストされたコンポーネント(判断ブロック602のいいえ)を含まない場合、展開は起こらない。その一方で、ネストされたコンポーネントがある場合(判断ブロック602のはい)、これらのネストされたコンポーネントが展開されて(動作603)、その結果、ネストされたコンポーネントによってインポートされるサービスがあれば該サービスがコンポーネント領域に表示されかつネストされたコンポーネントによってエクスポートされるサービスがあればサービスがコンポーネント領域に表示される範囲までネストされたコンポーネントもコンポーネント領域に表示される。この展開の例は、図4に関して説明された。1つまたは複数のネストされたコンポーネントを有するコンポーネントがコンポーネント領域にインスタンス化されるときはいつでも、この展開を行なうことができる。あるいはまたは更に、バインディングが繰り返されるたびに、予め定められた時間にコンポーネントが展開されてもよい。例えば、図3では、ネストされたコンポーネントの展開は、各イテレーションの初めに生じる。] 図3 図4 図6
[0056] 図5に戻ると、一旦コンポーネントの全てが展開されると、コンポーネント領域論理は、コンポーネント領域論理がエクスポートされるサービスを求めてコンポーネントにポーリングしようとしていると最初のコンポーネントセットのうちの少なくともいくつかのコンポーネントに通知することは任意である(動作504)。コンポーネント領域は、そのサービスエクスポートに関してポーリングされるのに備えてとられるようにプログラムされているいずれかのアクションをとることによって応じることができる。例えば、コンポーネントは、別のコンポーネントをコンポーネント領域にプログラム的にインスタンス化することができる。コンポーネントは、そうでなければサービスエクスポートの要求を受け取るために適当な準備状態に入ることができる。] 図5
[0057] 次に、コンポーネント領域論理は、コンポーネントによって提供されるサービスエクスポートを求めてコンポーネント領域の各コンポーネントにポーリングする(動作505)。このリストから、サービスエクスポートデータが策定されてもよい。次に、コンポーネント領域論理は、サービスインポートを求めて各コンポーネントにポーリングすることができて、サービスインポートの各々をサービスエクスポートのリストで満足させることができる(動作506)。図7に関して更に詳細に説明されるように、サービスインポートを満足させるサービスエクスポートが見つけられない場合、コンポーネント領域論理は、サービスを提供するクラスを求めてカタログを捜し、適当であれば、カタログ化されたクラスのコンポーネントをインスタンス化させる。] 図7
[0058] 特定のサービスインポートを満足させることができる複数のサービスエクスポートがあり、かつ複数のエクスポートがサービスインポートに受け入れられる場合、サービスエクスポートの全ては、サービスエクスポートの集合としてサービスインポートが利用できるようにされる。サービスインポートが所望するより多くのサービスインポートを満足させることができるサービスエクスポートがある場合もある。例えば、1つのサービスエクスポートだけが所望されるかまたは1つしかサービスエクスポートが所望されないことを示したサービスインポートを満足させることができる複数のサービスエクスポートがある場合がある。あるいは、4つのサービスエクスポートしか所望しないことを示したサービスインポートに対して利用可能な10個のサービスエクスポートがある場合がある。その場合、これらの場合を処理する方法を識別するためにコンフリクトの解消が用いられる。]
[0059] サービスインポートが所望するより多くのサービスエクスポートがある場合、1つの任意のコンフリクト解消ステップは単にコンポジションプロセスを失敗させることである。その場合、例外レポートは、コンポジションプロセスを完了できなかった理由に関していくつかのガイダンスを与えることができる。別のオプションは、特定のマッチングの許容性を示すルールを有すること及び、サービスインポートにマッチングされたより多くの受け入れ可能なサービスエクスポート(または複数のサービスエクスポート)を有することであって、その結果適当な数のサービスエクスポートがサービスインポートにバインディングされる。マッチングしているサービスエクスポートがない場合、サービスインポートはまた、中身のないマッチングが受け入れられるか否かを特定することができる。このことは、サービスのインポートによって可能にされる機能の重要性によって決まってもよい。]
[0060] 例えば、図7を参照すると、コンポーネント領域内でコンポーネントを捜すと(動作701)、コンポーネント領域内に特定のサービスインポートを満足させるサービスエクスポートが存在するか否かが判断される(判断ブロック702)。サービスエクスポートを提供するサービスコンポーネントが見つけられる場合(判断ブロック702のはい)、サービスインポートはコンポーネント領域内で見つけられたコンポーネントのサービスエクスポートを用いることで満足している(動作703)。] 図7
[0061] その一方で、特定のサービスインポートを満足させるサービスコンポーネントがコンポーネント領域内で見つけられない場合(判断ブロック702のいいえ)、適当なサービスをエクスポートするコンポーネントがコンポーネント領域の外側で見つけられる(動作704)。これは、例えば、コンポーネントのクラス及び該コンポーネントのクラスのエクスポートされたサービスの一覧を示しているカタログを参照することによって実現されてもよい。]
[0062] コンポーネントがコンポーネント領域内でインスタンス化されることになっているか(判断ブロック705の「インスタンス化」)またはコンポーネント領域論理によって抽出されることになっているかどうか(判断ブロック705の「抽出」)によって、異なる動作をとることができる。]
[0063] コンポーネントのインスタンス化が生じる場合、見つけられたコンポーネントはコンポーネント領域においてインスタンス化されることになっており(動作706)、新しくインスタンス化されたコンポーネントによってエクスポートされるサービスは、コンポーネント領域の前から存在するコンポーネントのサービスインポートにバインディングされる(動作707)。抽出が行われることになっている場合、コンポーネント領域論理の抽出メカニズムは、見つけられたコンポーネントによって提供されるサービスエクスポートを抽出することができる(動作708)。]
[0064] 図5に戻ると、一旦バインディングの最初のイテレーションが完了すると、様々なコンポーネントは、バインディングイテレーションが完了したことを通知される(動作507)。この段階で、コンポーネントは、最初のバインディングに応じて新しいサービスインポートまたはサービスエクスポートを表示させることができる。] 図5
[0065] この実施形態において、ネストされたコンポーネントの展開が最初に実行され、サービスエクスポートのためのポーリングが次に行われ、サービスインポートのためのポーリング及び各サービスインポートの実現が次に行われる。しかしながら、これらのステップが予め定められた順番で行なわれかつ様々なコンポーネントがその順番について理解している限り、コンポーネントは、所定の順番の中でコンポーネントがある場所に基づいて適当な処置を行うことができる。例えば、上記の例では、コンポーネントはサービスエクスポートのポーリングの前にネストされたコンポーネントを最初に展開することになっていた。更に、サービスは、例えばプログラムで他のコンポーネントをインスタンス化することによって、自身にポーリングの準備をさせる立場にあった。最後に、一旦最初のバインディングが完了したならば、コンポーネントは、イテレーションを繰り返すことができるということを知り、従って、コンポーネントは次のイテレーションのための新しいサービスインポート及び新しいサービスエクスポートを公開する機会を有していた。]
[0066] 図5に戻ると、次に、最後のイテレーションからのバインディングオペレーションによってバインディングオペレーションの別のイテレーションを必要とする何らかの副次的な影響が生じたか否かが判断される(判断ブロック508)。例えば、バインディングオペレーションにおいて、新しいコンポーネントは、コンポーネント領域にインスタンス化されてもよい。例えば、コンポーネントは、カタログの中で見つけられてコンポーネント領域にインスタンス化される場合もあった。これらの新しくインスタンス化されたコンポーネントは、該コンポーネント自体サービスインポートを有することができる。更に、コンポーネントがサービスバインディングを有する場合、該コンポーネントは自身が新しいサービスエクスポートを提供することができるということを発見することができ、新しいサービスインポートを公開する必要があるかもしれない。] 図5
[0067] 反復が要求される場合(判断ブロック508のはい)、コンポーネント領域論理は、(最初のインスタンス化の間にすでに展開されていないならば)もう一度あらゆる新しくインスタンス化されたコンポーネントのうちのあらゆるネストされたコンポーネントを展開し(動作503)、次にそのサービスエクスポートのポーリングが開始されようとしていることをコンポーネントの各々に通知する(動作504)。再イテレーションが行なわれるべきであるという判断は、最初のコンポーネントセットがすでにバインディングされた後に行なわれてもよい。例えば、コンポーネントの各々についての再バインディングオペレーションを必要とするプログラムの新しいバージョンを、利用できるようになるかもしれない。]
[0068] 再イテレーションが要求されていない場合(判断ブロック508のいいえ)、コンポーネントはバインディングオペレーションが完了したことを通知される(動作509)。コンポーネントのこのコンポジションは、コンパイル時にではなく、ランタイムに行なわれ、サービスインポート及びサービスエクスポートの厳密でない識別に基づいていた。これによって、新しいコンポーネントを追加することが可能になり、古いコンポーネントを修正しかつ出荷後の時期にシステムを追加することが可能になる。例えば、新しいコンポーネントが特定のプログラムに利用できるようになるときに、カタログが更新されてもよい。プログラムが次に動作するときに、特定のサービスを提供しているコンポーネントを、例えばプログラムベンダからネットワークを介してなど、遠隔位置から得ることができてもよい。]
[0069] 一部の例では、イテレーションは終了されるかもしれない。例えば、インポートをエクスポートで満足させようとするプロセスにおいて(動作506)、いくつかのインポートは、利用できるコンポーネントから成る最新のセットを用いて我慢できるほどに満足させることができないということが発見されてもよい。その場合、該プロセスは終了してもよい。コンピュータシステムは、自動的にまたは場合によってはユーザのヘルプでもしくは場合によってはいくつかのポリシルールに従って、1つまたは複数のコンポーネントを除去することによってかつ/または1つまたは複数のコンポーネントをコンポーネント領域に追加することによって、コンポーネントセットを変更することができる。次に、コンポジションプロセスは、再び再起動されてもよい。コンポジションプロセスの再起動の時点で、いくつかのインポートがいくつかのエクスポートにすでにバインディングされている場合、再バインディングは、別のエクスポートに再バインディングしようと試みることなしにそのバインディングを履行することができることは任意である。あるいは、コンポジションプロセスは、既存のバインディングを尊重せずに再び最初からやり直すかもしれない。これらの2つの手段の間で、既存のバインディングを尊重する様々な異なるレベルがある。]
[0070] 本発明は、その精神または主要な特徴から逸脱することなく、他の特定の形式で具体化することができる。説明された実施形態は、例示的であってかつ限定的でないと、あらゆる点で考慮されなければならない。従って、本発明の範囲は、前述の詳細な説明によってよりはむしろ添付の特許請求の範囲によって示される。特許請求の意義の範囲内及び特許請求の範囲の同等の範囲内で生じる全ての変更は、特許請求の範囲の中で受け入れられることになっている。]
权利要求:

請求項1
コンピュータ実行可能命令を有する1つまたは複数のコンピュータ可読媒体(104)を含むコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、コンピュータシステム(100)の1つまたは複数のプロセッサ(102)によって実行されると、前記コンピュータシステムにプログラムの複数のコンポーネントを作成する方法を実行させ、前記方法は、コンポーネント領域(112、210)を生成する動作(501)と、1つまたは複数のコンポーネントから成る初期のセット(211)をインスタンス化し、前記コンポーネントが前記コンポーネント領域に付随するようにして、前記最初のセットの前記コンポーネントの各々によってインポートされるサービス(A、B、C、D、E、F)があればこれらを前記コンポーネント領域に表示するようにしかつ前記最初のセットの前記コンポーネントの各々によってエクスポートされるサービスがあればこれらも前記コンポーネント領域に表示するようにする動作(502、601)と、ネストされたコンポーネント(401、402、411、412)を含む前記1つまたは複数のコンポーネントから成る初期のセットのうちのいずれかのコンポーネントを識別する前記コンポーネント領域の動作(602)と、1つまたは複数のネストされたコンポーネントを含む前記初期のコンポーネントセットのうちの各コンポーネントについて、前記1つまたは複数のネストされたコンポーネントを含むコンポーネントを展開して、前記ネストされたコンポーネントによってインポートされるサービスがあればこれらが前記コンポーネント領域に表示される範囲まで前記コンポーネント領域に表示するようにしかつ前記ネストされたコンポーネントによってエクスポートされるサービスがあればこれらが前記コンポーネント領域に表示されるようにする展開動作(503、603)と、エクスポートされるサービスを求めて前記初期のコンポーネントセットにポーリングを行う前記コンポーネント領域の動作(505)と、インポートされるサービスを求めて前記初期のコンポーネントセットにポーリングを行って、前記初期のコンポーネントセットのうちの前記コンポーネントのうちの少なくとも1つのインポートされた前記サービスのうちの少なくとも1つを、前記初期のコンポーネントセットのうちの別のコンポーネントによってエクスポートされる前記サービスのうちの1つで満足させる動作(506)であって、1つまたは複数のネストされたコンポーネントを含む各コンポーネントについての前記展開動作、エクスポートされるサービスを求めてポーリングを行う前記コンポーネント領域の動作、及びインポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる前記コンポーネント領域の動作は、予め定められた順番で行われる、前記コンポーネント領域の動作(506)とを含むことを特徴とするコンピュータプログラム製品。
請求項2
前記予め定められた順番は、第1に、1つまたは複数のネストされたコンポーネントを含む各コンポーネントについての前記展開動作、第2に、エクスポートされるサービスを求めてポーリングを行う前記コンポーネント領域の動作、第3に、インポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる前記コンポーネント領域の動作であることを特徴とする請求項1に記載のコンピュータプログラム製品。
請求項3
前記方法が更に、エクスポートされるサービスを求める前記ポーリング動作の前に、エクスポートされるサービスを求めるポーリングが開始されようとしていることを前記初期のコンポーネントセットのうちの少なくともいくつかに通知する動作を含むことを特徴とする請求項2に記載のコンピュータプログラム製品。
請求項4
前記方法が更に、インポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる前記動作の後に、インポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる動作が、完了したことを前記最初のコンポーネントセットに通知する動作を含むことを特徴とする請求項3に記載のコンピュータプログラム製品。
請求項5
前記方法が更に、インポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる前記動作の後に、インポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる動作が、完了したことを前記最初のコンポーネントセットに通知する動作を含むこと特徴とする請求項2に記載のコンピュータプログラム製品。
請求項6
前記1つまたは複数のネストされたコンポーネントを含む各コンポーネントについての前記展開動作、エクスポートされたサービスを求める前記コンポーネント領域の前記ポーリング動作、第3にインポートされるサービスを求めてポーリングを行って前記インポートされるサービスのうちの少なくとも1つを満足させる動作を含む集合動作は、前記ポーリングの集合動作のうちの最初のイテレーションにおいて行なわれ、前記方法は更に、前記インポートされるサービスを求めてポーリングを行って前記集合動作のうちの前記最初のイテレーションにおいてインポートされる前記サービスのうちの少なくとも1つを満足させる動作の後に、前記サービスのインポートのうちの少なくとも1つのインポートを満足させる前記動作の結果として追加された更なるサービスのインポートがあるかどうかを判断する動作と、前記集合動作のうちの次のイテレーションを行う動作とを含むことを特徴とする請求項2に記載のコンピュータプログラム製品。
請求項7
前記集合動作は、全てのサービスのインポートを満足させるまで、複数のイテレーションについて反復して行われることを特徴とする請求項6に記載のコンピュータプログラム製品。
請求項8
前記追加のサービスのインポートは、追加のコンポーネントが前記コンポーネント領域に付随する結果として追加され、前記初期のコンポーネントセットのサービスインポートを満足させ、追加のサービスインポートは、前記追加のコンポーネントのうちの少なくとも1つのサービスインポートであることを特徴とする請求項6に記載のコンピュータプログラム製品。
請求項9
前記追加のサービスインポートは、そのサービスインポートのうちの別のサービスインポートを満足させた後に、前記初期のコンポーネントセットのうちの1つによって追加されたことを特徴とする請求項6に記載のコンピュータプログラム製品。
請求項10
前記1つまたは複数のコンピュータ可読媒体は、物理メモリ及び/または物理記憶媒体であることを特徴とする請求項1に記載のコンピュータプログラム製品。
請求項11
コンピュータ実行可能命令を有する1つまたは複数のコンピュータ可読媒体(104)を含むコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、コンピュータシステム(100)の1つまたは複数のプロセッサ(102)で実行されると、前記コンピュータシステムにプログラムの複数のコンポーネント(211−216)を作成する方法(500)を実行させ、前記方法は、前記コンポーネント領域内でインスタンス化された各コンポーネントによってエクスポートされるサービス及びインポートされるサービス(A、B、C、D、E、F)を識別することができるコンポーネント領域(112、210)を作成する動作(501)と、前記コンポーネント領域において最初のコンポーネントセットをインスタンス化する動作(502)と、少なくとも2つのイテレーションについて以下のことを反復して行なう動作と、を含み、前記以下のことは、前記最初のコンポーネントセットにおいて前記コンポーネントの各々のうちのネストされたコンポーネント(401、402、411、412)の展開(410)を行なう動作(503、603)であって、前記ネストされたコンポーネントの展開によって、前記コンポーネント領域が前記ネストされたコンポーネントによってエクスポートされるサービス及びインポートされるサービスを識別できるようになる、動作と、前記ネストされたコンポーネントを含む前記最初のコンポーネントセットにおいて前記コンポーネントの各々によって前記エクスポートされるサービスがあればこれらを識別する前記コンポーネント領域の動作(505)と、前記エクスポートされるサービスを識別する動作の後に、前記最初のコンポーネントセットにおいて前記コンポーネントの各々によって前記インポートされるサービスがあればこれらを識別する前記コンポーネント領域の動作(506)と、前記満足させる動作の後にまだ満足させるべきインポートされる他のサービスがまだあるかどうかを判断して、ある場合は、前記コンポーネント領域において場合によっては展開されているコンポーネントセットに関して次のイテレーションを用いて反復する動作に続き、ない場合は前記反復する動作を終了する動作(508)とを含むことを特徴とするコンピュータプログラム製品。
請求項12
前記1つまたは複数のコンピュータ可読媒体は、物理メモリ及び/または物理記憶媒体であることを特徴とする請求項11に記載のコンピュータプログラム製品。
請求項13
前記イテレーションのうちの少なくとも1つについて、前記インポートされるサービスのうちの少なくとも1つを満足させる動作は、前記コンポーネント領域の前記コンポーネントのうちの別のコンポーネントによってエクスポートされるサービスで、前記インポートされるサービスのうちの少なくとも1つを満足させる動作を含むことを特徴とする請求項12に記載のコンピュータプログラム製品。
請求項14
前記イテレーションのうちの少なくとも1つについて、前記インポートされるサービスのうちの少なくとも1つを満足させる動作は、前記コンポーネント領域内の前記インスタンス化されたコンポーネントを探す動作と、前記コンポーネント領域内の前記インスタンス化されたコンポーネントのうちのいずれも前記サービスをエクスポートしないと判断する動作と、前記サービスをエクスポートする前記コンポーネント領域内で、まだインスタンス化されていないコンポーネントを見つける動作と、前記コンポーネント領域内で前記見つけられたコンポーネントをインスタンス化する動作と、前記見つけられたコンポーネントの前記インスタンス化によってエクスポートされるサービスを、前記コンポーネント領域内ですでにインスタンス化されている前記コンポーネントによってインポートされる前記サービスにバインディングする動作とを含むことを特徴とする請求項12に記載のコンピュータプログラム製品。
請求項15
前記見つける動作は、コンポーネント及びコンポーネントのエクスポートされるサービスを記載したカタログを参照する動作を含むことを特徴とする請求項14に記載のコンピュータプログラム製品。
請求項16
前記展開されたネストされたコンポーネントは、ネストされたコンポーネントの階層が少なくとも2つあることを特徴とする請求項11に記載のコンピュータプログラム製品。
請求項17
前記イテレーションのうちの少なくとも1つについて、前記コンポーネントによってエクスポートされる前記サービスを識別する前にかつ前記エクスポートされるサービスのうちの少なくとも1つを満足させる前記動作の後に、前記コンポーネント領域の前記コンポーネントに通知する動作を更に含むことを特徴とする請求項11に記載のコンピュータプログラム製品。
請求項18
前記反復する動作が完了した後に、前記コンポーネント領域の前記コンポーネントに通知する動作を更に含むことを特徴とする請求項11に記載のコンピュータプログラム製品。
請求項19
コンピュータ実行可能命令を有する1つまたは複数のコンピュータ可読媒体(104)を含むコンピュータプログラム製品であって、前記コンピュータ実行可能命令は、コンピュータシステム(100)の1つまたは複数のプロセッサ(102)で実行されると、前記コンピュータシステムにプログラムの複数のコンポーネント(211−216)を作成する方法(500)を実行させ、前記方法は、前記コンポーネント領域内でインスタンス化された各コンポーネントによってエクスポートされるサービス及びインポートされるサービス(A、B、C、D、E、F)を識別することができるコンポーネント領域(112、210)を作成する動作(501)と、前記コンポーネント領域において最初のコンポーネントセットをインスタンス化する動作(502)と、少なくとも2つのイテレーションについて以下のことを反復する動作して行う動作と、を含み、前記以下のことは、前記最初のコンポーネントセット内の前記コンポーネントの各々のうちのネストされたコンポーネント(401、402、411、412)の展開(410)を行なう動作(503、603)であって、前記ネストされたコンポーネントの展開によって、前記コンポーネント領域が前記ネストされたコンポーネントによってエクスポートされるサービス及びインポートされるサービスを識別できるようになる、動作(503、603)と、前記コンポーネントによってエクスポートされる前記サービスを識別する(505)前に前記コンポーネント領域の前記コンポーネントに通知する動作(504)と、前記ネストされたコンポーネントを含む前記最初のコンポーネントセットの前記コンポーネントの各々によって前記エクスポートされるサービスがあればこれらを識別する前記コンポーネント領域の動作(505)と、前記エクスポートされるサービスを識別する動作(505)の後に、前記最初のコンポーネントセットの前記コンポーネントの各々によって前記インポートされるサービスがあればこれらを識別する前記コンポーネント領域の動作(506)と、インポートされる前記サービスのうちの少なくとも1つを満足させる動作(506)と、前記満足させる動作が完了したことを前記コンポーネント領域の前記コンポーネントに通知する動作(507)と、前記満足させる動作の後にまだ満足させるべきインポートされる他のサービスがまだあるかどうかを判断して、ある場合は、前記コンポーネント領域の場合によっては展開されているコンポーネントセットに関して次のイテレーションを用いて反復する動作に続き、ない場合は前記イテレーション動作を終了する動作(508)と、前記反復する動作が完了したことを前記コンポーネント領域の前記コンポーネントに通知する動作(509)とを含むことを特徴とするコンピュータプログラム製品。
請求項20
前記1つまたは複数のコンピュータ可読媒体は、物理メモリ及び/または物理記憶媒体であることを特徴とする請求項19に記載のコンピュータプログラム製品。
类似技术:
公开号 | 公开日 | 专利标题
US20180101400A1|2018-04-12|Computer-implemented systems and methods for service provisioning
Florijn et al.1997|Tool support for object-oriented patterns
EP0474340B1|1999-05-19|Methods and apparatus for providing dynamic invocation of applicatons in a distributed heterogeneous environment
US5802365A|1998-09-01|Dynamic device matching using driver candidate lists
US6910048B1|2005-06-21|Object oriented framework mechanism for data transfer between a data source and a data target
JP4972082B2|2012-07-11|開発者がシステム上の周知のロケーションを容易に発見し、または拡張するための能力
US7043481B2|2006-05-09|System, method and software for creating, maintaining, navigating or manipulating complex data objects and their data relationships
US6738077B1|2004-05-18|Dynamic generation and automated distribution of user interface from database model
US5905987A|1999-05-18|Method, data structure, and computer program product for object state storage in a repository
CA2427288C|2011-08-16|System and method for associating properties with objects
US9009195B2|2015-04-14|Software framework that facilitates design and implementation of database applications
AU628753B2|1992-09-17|Method and apparatus for implementing server functions in a distributed heterogeneous environment
KR101117945B1|2012-08-09|분산형 컴퓨팅 시스템을 위한 아키텍쳐 및 분산형 애플리케이션의 자동화된 설계, 배치 및 관리
US10025572B2|2018-07-17|Dynamic collection attribute-based computer programming language methods
US6038393A|2000-03-14|Software development tool to accept object modeling data from a wide variety of other vendors and filter the format into a format that is able to be stored in OMG compliant UML representation
US6243709B1|2001-06-05|Method and apparatus for loading stored procedures in a database corresponding to object-oriented data dependencies
KR101137146B1|2012-04-19|설치에 대해 유효한 의존적 소프트웨어 갱신의 최대세트를 판정하는 시스템 및 방법
CA2077273C|1996-12-03|Language neutral objects
US8271530B2|2012-09-18|Method and mechanism for managing and accessing static and dynamic data
JP6581710B2|2019-09-25|オブジェクト指向スクリプトツールをサポートするシステムおよび方法
CN101073058B|2012-02-29|用于隔离对软件应用程序的执行的方法
US7346899B2|2008-03-18|Lookup facility in distributed computer systems
US7711919B2|2010-05-04|Methods and apparatus for digital data processing with mutable inheritance
CN100585589C|2010-01-27|用以支持用户定义类型的继承的系统和方法
US5937409A|1999-08-10|Integrating relational databases in an object oriented environment
同族专利:
公开号 | 公开日
EP2257868A4|2013-03-13|
WO2009099691A3|2009-10-08|
US8108831B2|2012-01-31|
CN101939723B|2013-11-20|
EP2257868A2|2010-12-08|
JP4959003B2|2012-06-20|
EP2257868B1|2019-08-14|
US20090204942A1|2009-08-13|
WO2009099691A2|2009-08-13|
CN101939723A|2011-01-05|
引用文献:
公开号 | 申请日 | 公开日 | 申请人 | 专利标题
法律状态:
2012-01-07| A621| Written request for application examination|Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20120106 |
2012-01-07| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120106 |
2012-02-03| A521| Written amendment|Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20120202 |
2012-02-03| A871| Explanation of circumstances concerning accelerated examination|Free format text: JAPANESE INTERMEDIATE CODE: A871 Effective date: 20120202 |
2012-02-14| TRDD| Decision of grant or rejection written|
2012-02-14| A975| Report on accelerated examination|Free format text: JAPANESE INTERMEDIATE CODE: A971005 Effective date: 20120213 |
2012-02-20| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 Effective date: 20120217 |
2012-02-23| A01| Written decision to grant a patent or to grant a registration (utility model)|Free format text: JAPANESE INTERMEDIATE CODE: A01 |
2012-03-29| A61| First payment of annual fees (during grant procedure)|Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20120319 |
2012-03-30| FPAY| Renewal fee payment (event date is renewal date of database)|Free format text: PAYMENT UNTIL: 20150330 Year of fee payment: 3 |
2012-03-30| R150| Certificate of patent or registration of utility model|Free format text: JAPANESE INTERMEDIATE CODE: R150 Ref document number: 4959003 Country of ref document: JP Free format text: JAPANESE INTERMEDIATE CODE: R150 |
2015-03-10| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2015-04-14| S111| Request for change of ownership or part of ownership|Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
2015-04-22| R350| Written notification of registration of transfer|Free format text: JAPANESE INTERMEDIATE CODE: R350 |
2016-03-08| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2017-03-07| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2018-03-06| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2019-03-05| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2020-02-28| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
2021-02-26| R250| Receipt of annual fees|Free format text: JAPANESE INTERMEDIATE CODE: R250 |
优先权:
申请号 | 申请日 | 专利标题
[返回顶部]